由於陣列長度在建立後就不能更動,Go 提供切片 (slice) 這種容器。
切片和陣列相似,同樣也是線性的、以數字為索引,索引值同樣從 0 開始。
package main
import (
"fmt"
)
func main() {
slice1 := []string{"thresh","nami","rakan","bard"}
fmt.Println(slice1)
}
與array不一樣的地方是,slice不需要預設陣列長度
也可以利用slice來製作二維陣列
package main
import (
"fmt"
)
func main() {
slice1 := [][]float64{
[]float64{1, 2, 3},
[]float64{4, 5, 6},
}
for i := 0; i < 2; i++ {
for e := 0; e < 3; e++ {
fmt.Println(slice1[i][e])
}
}
}
執行結果
1
2
3
4
5
6
或者使用make動態產生一個slice
package main
import "fmt"
func main() {
slice1 := make([]int , 6)
for i := 0; i <len(slice1) ; i++{
n := i + 1
slice1[i] = n * n
}
for _ , e := range slice1{
fmt.Println(e)
}
}
執行結果
1
4
9
16
25
36
若要改變切片大小 我們就要用到append函式
package main
import "fmt"
func main(){
slice1 := []int{1,2,3,4,5}
slice1 = append(slice1 ,6, 7)
for _ , e := range slice1{
fmt.Print(e," ")
}
}
func append(s []T, vs ...T)
append 的第一個參數 s 是一個類型為 T 的數組,其餘類型為 T 的值將會添加到 slice。
1 2 3 4 5 6 7
若需要減少某個切片的元素
就需要一點技巧
package main
import "fmt"
func main(){
slice1 := []int{0,1,2,3,4,5}
slice1 = append(slice1[0:2],slice1[3:6]...)
for _ , e := range slice1{
fmt.Print(e," ")
}
}
append裡選擇子切片從索引0(包含) 到索引2(不包含)+從索引3(包含) 到索引6(不包含)
執行結果
0 1 3 4 5